package com.flyox.game.militarychess.client.view.composite;

/*
 * @(#)HrefButtonArea.java	1.14 04/07/26
 * 
 * Copyright (c) 2004 Sun Microsystems, Inc. All Rights Reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 
 * -Redistribution of source code must retain the above copyright notice, this
 *  list of conditions and the following disclaimer.
 * 
 * -Redistribution in binary form must reproduce the above copyright notice, 
 *  this list of conditions and the following disclaimer in the documentation
 *  and/or other materials provided with the distribution.
 * 
 * Neither the name of Sun Microsystems, Inc. or the names of contributors may 
 * be used to endorse or promote products derived from this software without 
 * specific prior written permission.
 * 
 * This software is provided "AS IS," without a warranty of any kind. ALL 
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. ("SUN")
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST 
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, 
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY 
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, 
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 * 
 * You acknowledge that this software is not designed, licensed or intended
 * for use in the design, construction, operation or maintenance of any
 * nuclear facility.
 */

/*
 * @(#)HrefButtonArea.java	1.14 04/07/26
 */

import java.awt.Graphics;
import java.awt.Image;
import java.net.MalformedURLException;
import java.net.URL;

import com.flyox.game.militarychess.bean.ChessSeat.SEAT_NAME;

/**
 * An improved "Fetch a URL" ImageArea class. This class extends the basic
 * ImageArea Class to fetch a URL when the user clicks in the area. In addition,
 * special custom highlights are used to make the area look and feel like a 3-D
 * button.
 * 
 * @author Jim Graham
 * @version 1.14, 07/26/04
 */
public class HrefButtonArea extends ImageMapArea {
	/** The URL to be fetched when the user clicks on this area. */
	URL anchor;
	/** The highlight image for when the button is "UP". */
	Image upImage;
	/** The highlight image for when the button is "DOWN". */
	Image downImage;
	/** This flag indicates if the "button" is currently pressed. */
	boolean pressed = false;
	/** The border size for the 3-D effect. */
	int border = 2;
	SEAT_NAME seatName;
	
	public HrefButtonArea(SEAT_NAME seatName){
		this.seatName=seatName;
	}
	/**
	 * The argument string is the URL to be fetched. This method also constructs
	 * the various highlight images needed to achieve the 3-D effect.
	 */
	public void handleArg(String arg) {
		try {
			anchor = new URL("http://java.sun.com");
		} catch (MalformedURLException e) {
			anchor = null;
		}
		if (border * 2 > W || border * 2 > H) {
			border = Math.min(W, H) / 2;
		}
	}

	public void makeImages() {
		upImage = parent.getHighlight(X, Y, W, H, new ButtonFilter(false, parent.hlpercent, border, W, H));
		downImage = parent.getHighlight(X, Y, W, H, new ButtonFilter(true, parent.hlpercent, border, W, H));
	}

	public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
		if (img == (pressed ? downImage : upImage)) {
			return parent.imageUpdate(img, infoflags, x + X, y + Y, width, height);
		} else {
			return (img == downImage || img == upImage);
		}
	}

	/**
	 * The isTerminal method indicates whether events should propagate to the
	 * areas underlying this one.
	 */
	public boolean isTerminal() {
		return true;
	}

	/**
	 * The status message area is updated to show the destination URL. The
	 * graphical highlight is achieved using the ButtonFilter.
	 */
	public void highlight(Graphics g) {
		if (entered) {
			g.drawImage(pressed ? downImage : upImage, X, Y, this);
		}
	}

	public void enter() {
		repaint();
	}

	public void exit() {
		repaint();
	}

	/**
	 * Since the highlight changes when the button is pressed, we need to record
	 * the "pressed" state and induce a repaint.
	 */
	public boolean press() {
		pressed = true;
		repaint();
		return true;
	}

	/**
	 * The new URL is fetched when the user releases the mouse button only if
	 * they are still in the area.
	 */
	public boolean lift(int x, int y) {
		pressed = false;
		repaint();
		return true;
	}

	public SEAT_NAME getSeatName() {
		return seatName;
	}
}
